// 使用数组模拟双端队列( double-end queue )

// 通过原型为Array扩展新方法
Array.prototype.peekFirst = function(){
    if( this.length > 0 ){
        return this[ 0 ];
    }
    return null ;
}

Array.prototype.peekLast = function(){
    if( this.length > 0 ) {
        return this[ this.length - 1 ];
    }
    return null ;
}

// 定义一个空数组用来模拟双端队列
const deque = [];

// 第一次约定: 以数组开始位置为队列头，以数组末尾为队列尾部
// 入队: 在队列末尾添加元素
deque.push('顺治');
deque.push('康熙');
console.log( deque );

// 检查: 获取队列头部元素
let head = deque.peekFirst();
console.log( '检查: ' , head );
console.log( deque );

// 出队: 从队列头删除元素
head = deque.shift();
console.log( '出对: ' ,  head );
console.log( deque );

// 第二次约定: 以数组开始位置为队列尾部，以数组末尾为队列头部

// 入队: 在队列末尾添加元素
deque.unshift('孙悟空');
console.log(deque);

// 检查: 获取队列头部元素
head = deque.peekLast();
console.log( '检查: ' , head );
console.log( deque );

// 出队: 从队列头删除元素
head = deque.pop();
console.log( '出对: ' ,  head );
console.log( deque );